const mongo = require('../../db/mongodb');

class DAO {

  find(modelName, options) {
    return new Promise((r, j) => {
      mongo[modelName]
        .find(
          options.where,
          options.fields,
          options.options,
          function (err, docs) {
            if (err)
              return j(err);
            return r(docs);
          }
        );
    });
  }

  findOne(modelName, options) {
    return new Promise((r, j) => {
      mongo[modelName]
        .findOne(
          options.where,
          options.fields,
          options.options,
          function (err, docs) {
            if (err)
              return j(err);
            return r(docs);
          }
        );
    });
  }

  updateOne(modelName, options) {
    return new Promise((r, j) => {
      mongo[modelName]
        .where(options.where)
        .updateOne({
          $set: options.updateFields,
          ...options.options
        }, function (err, docs) {
          if (err)
            return j(err);
          return r(docs);
        });
    });
  }

  createMany(modelName, entities) {
    return new Promise((r, j) => {
      mongo[modelName].insertMany(entities, function (err, docs) {
        if (err)
          return j(err);
        return r(docs);
      });
    });
  }

}


module.exports = new DAO();